/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ModificarModeloCostos.java
 *
 * Created on 30/09/2012, 07:01:49 PM
 */

package modificaciones;

import Clases.Costos;
import Clases.Modelo;
import Clases.ModeloPorcentual;
import controlador.Escenario;
import flujocaja.EstimacionPorcentual;
import flujocaja.Manual;
import flujocaja.ModeloRegresion;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author ludwing
 */
public class ModificarModeloCostos extends javax.swing.JDialog {

    private Escenario escenarioNormal;
    private int tipoModeloCostos;
    private Costos mCostos;

    /** Creates new form ModificarModeloCostos */
    public ModificarModeloCostos(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }
    
    public void modificar(Escenario escenario){
        this.setTitle("Modificar costos");
        this.escenarioNormal = escenario;
        this.tipoModeloCostos = escenario.getModeloCostos().getTipoCosto();
        this.mCostos = escenario.getModeloCostos();
        
        if (this.tipoModeloCostos == Costos.COSTO_PORCENTUAL){
            //this.activarMenusPorcentaje();
            this.etiquetaPorcentaje.setText("Porcentaje actual:");
            this.jTextField1.setText(Double.toString(this.escenarioNormal.getModeloCostos().getPromedio()*100));
            //this.etiquetaPorcentaje.setText("Porcentaje actual: "+jTextField1.getText()+"%");
        }        
        this.cargarDatos(this.escenarioNormal.getListaAnios(), this.escenarioNormal.getModeloCostos().getCostosActuales());
        this.setVisible(true);
    }
    
    private void cargarDatos(int[] encabezado,double[]valores){
        DefaultTableModel modelo = new DefaultTableModel();
        for (int i=0; i<encabezado.length; i++){
            modelo.addColumn(encabezado[i]);
        }
        Object [] fila = new Object[valores.length];
        for (int i=0; i<valores.length; i++){
            fila[i] = valores[i];
        }
        modelo.addRow(fila);
        this.datos.setModel(modelo);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        datos = new javax.swing.JTable();
        panelPorcentaje = new javax.swing.JPanel();
        etiquetaPorcentaje = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        aceptar = new javax.swing.JButton();
        editar = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        menuDatos = new javax.swing.JMenu();
        editarManualmente = new javax.swing.JMenuItem();
        nuevoModeloPorcentual = new javax.swing.JMenuItem();
        listaPorcentajesManual = new javax.swing.JMenuItem();
        nuevoModeloPronosticacion = new javax.swing.JMenuItem();
        menuPorcentaje = new javax.swing.JMenu();
        cambiarPorcentajeAMano = new javax.swing.JMenuItem();
        menuPorcentajesManual = new javax.swing.JMenuItem();
        cambiarModeloAPronosticacion = new javax.swing.JMenuItem();
        menuPronosticacion = new javax.swing.JMenu();
        redefinirModeloPronosticacion = new javax.swing.JMenuItem();
        cambiarModeloAPorcentaje = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setName("Form"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        datos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        datos.setName("datos"); // NOI18N
        jScrollPane1.setViewportView(datos);

        panelPorcentaje.setName("panelPorcentaje"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(flujocaja.FlujoCajaApp.class).getContext().getResourceMap(ModificarModeloCostos.class);
        etiquetaPorcentaje.setText(resourceMap.getString("etiquetaPorcentaje.text")); // NOI18N
        etiquetaPorcentaje.setName("etiquetaPorcentaje"); // NOI18N

        jTextField1.setEditable(false);
        jTextField1.setText(resourceMap.getString("jTextField1.text")); // NOI18N
        jTextField1.setName("jTextField1"); // NOI18N
        jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextField1FocusLost(evt);
            }
        });

        javax.swing.GroupLayout panelPorcentajeLayout = new javax.swing.GroupLayout(panelPorcentaje);
        panelPorcentaje.setLayout(panelPorcentajeLayout);
        panelPorcentajeLayout.setHorizontalGroup(
            panelPorcentajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPorcentajeLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(etiquetaPorcentaje)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
        );
        panelPorcentajeLayout.setVerticalGroup(
            panelPorcentajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPorcentajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(etiquetaPorcentaje))
        );

        aceptar.setText(resourceMap.getString("aceptar.text")); // NOI18N
        aceptar.setName("aceptar"); // NOI18N
        aceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                aceptarActionPerformed(evt);
            }
        });

        editar.setText(resourceMap.getString("editar.text")); // NOI18N
        editar.setName("editar"); // NOI18N
        editar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editarActionPerformed(evt);
            }
        });

        jMenuBar1.setName("jMenuBar1"); // NOI18N

        menuDatos.setText(resourceMap.getString("menuDatos.text")); // NOI18N
        menuDatos.setName("menuDatos"); // NOI18N

        editarManualmente.setText(resourceMap.getString("editarManualmente.text")); // NOI18N
        editarManualmente.setName("editarManualmente"); // NOI18N
        editarManualmente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editarManualmenteActionPerformed(evt);
            }
        });
        menuDatos.add(editarManualmente);

        nuevoModeloPorcentual.setText(resourceMap.getString("nuevoModeloPorcentual.text")); // NOI18N
        nuevoModeloPorcentual.setName("nuevoModeloPorcentual"); // NOI18N
        nuevoModeloPorcentual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nuevoModeloPorcentualActionPerformed(evt);
            }
        });
        menuDatos.add(nuevoModeloPorcentual);

        listaPorcentajesManual.setText(resourceMap.getString("listaPorcentajesManual.text")); // NOI18N
        listaPorcentajesManual.setName("listaPorcentajesManual"); // NOI18N
        listaPorcentajesManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                listaPorcentajesManualActionPerformed(evt);
            }
        });
        menuDatos.add(listaPorcentajesManual);

        nuevoModeloPronosticacion.setText(resourceMap.getString("nuevoModeloPronosticacion.text")); // NOI18N
        nuevoModeloPronosticacion.setName("nuevoModeloPronosticacion"); // NOI18N
        nuevoModeloPronosticacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nuevoModeloPronosticacionActionPerformed(evt);
            }
        });
        menuDatos.add(nuevoModeloPronosticacion);

        jMenuBar1.add(menuDatos);

        menuPorcentaje.setText(resourceMap.getString("menuPorcentaje.text")); // NOI18N
        menuPorcentaje.setName("menuPorcentaje"); // NOI18N
        menuPorcentaje.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuPorcentajeActionPerformed(evt);
            }
        });

        cambiarPorcentajeAMano.setText(resourceMap.getString("cambiarPorcentajeAMano.text")); // NOI18N
        cambiarPorcentajeAMano.setName("cambiarPorcentajeAMano"); // NOI18N
        cambiarPorcentajeAMano.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cambiarPorcentajeAManoActionPerformed(evt);
            }
        });
        menuPorcentaje.add(cambiarPorcentajeAMano);

        menuPorcentajesManual.setText(resourceMap.getString("menuPorcentajesManual.text")); // NOI18N
        menuPorcentajesManual.setName("menuPorcentajesManual"); // NOI18N
        menuPorcentajesManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuPorcentajesManualActionPerformed(evt);
            }
        });
        menuPorcentaje.add(menuPorcentajesManual);

        cambiarModeloAPronosticacion.setText(resourceMap.getString("cambiarModeloAPronosticacion.text")); // NOI18N
        cambiarModeloAPronosticacion.setName("cambiarModeloAPronosticacion"); // NOI18N
        cambiarModeloAPronosticacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cambiarModeloAPronosticacionActionPerformed(evt);
            }
        });
        menuPorcentaje.add(cambiarModeloAPronosticacion);

        jMenuBar1.add(menuPorcentaje);

        menuPronosticacion.setText(resourceMap.getString("menuPronosticacion.text")); // NOI18N
        menuPronosticacion.setName("menuPronosticacion"); // NOI18N

        redefinirModeloPronosticacion.setText(resourceMap.getString("redefinirModeloPronosticacion.text")); // NOI18N
        redefinirModeloPronosticacion.setName("redefinirModeloPronosticacion"); // NOI18N
        redefinirModeloPronosticacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                redefinirModeloPronosticacionActionPerformed(evt);
            }
        });
        menuPronosticacion.add(redefinirModeloPronosticacion);

        cambiarModeloAPorcentaje.setText(resourceMap.getString("cambiarModeloAPorcentaje.text")); // NOI18N
        cambiarModeloAPorcentaje.setName("cambiarModeloAPorcentaje"); // NOI18N
        cambiarModeloAPorcentaje.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cambiarModeloAPorcentajeActionPerformed(evt);
            }
        });
        menuPronosticacion.add(cambiarModeloAPorcentaje);

        jMenuBar1.add(menuPronosticacion);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 759, Short.MAX_VALUE)
                    .addComponent(panelPorcentaje, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(editar)
                        .addContainerGap(602, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(aceptar)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelPorcentaje, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(editar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(aceptar)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void cambiarPorcentajeAManoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cambiarPorcentajeAManoActionPerformed
        // TODO add your handling code here:
        this.establecerNuevoModeloPorcentual();
    }//GEN-LAST:event_cambiarPorcentajeAManoActionPerformed

    private void nuevoModeloPorcentualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nuevoModeloPorcentualActionPerformed
        // TODO add your handling code here:
        this.establecerNuevoModeloPorcentual();        
    }//GEN-LAST:event_nuevoModeloPorcentualActionPerformed

    private void nuevoModeloPronosticacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nuevoModeloPronosticacionActionPerformed
        // TODO add your handling code here:
        this.nuevoModeloPronosticacion();
    }//GEN-LAST:event_nuevoModeloPronosticacionActionPerformed

    private void editarManualmenteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editarManualmenteActionPerformed
        // TODO add your handling code here:
        this.edicionManual();
    }//GEN-LAST:event_editarManualmenteActionPerformed

    private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextField1FocusLost
        // TODO add your handling code here:
        
    }//GEN-LAST:event_jTextField1FocusLost

    private void cambiarModeloAPronosticacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cambiarModeloAPronosticacionActionPerformed
        // TODO add your handling code here:
        this.nuevoModeloPronosticacion();
    }//GEN-LAST:event_cambiarModeloAPronosticacionActionPerformed

    private void cambiarModeloAPorcentajeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cambiarModeloAPorcentajeActionPerformed
        // TODO add your handling code here:
        this.establecerNuevoModeloPorcentual();
    }//GEN-LAST:event_cambiarModeloAPorcentajeActionPerformed

    private void aceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aceptarActionPerformed
        // TODO add your handling code here:
        this.dispose();
    }//GEN-LAST:event_aceptarActionPerformed

    private void editarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editarActionPerformed
        // TODO add your handling code here:
        this.edicionManual();
    }//GEN-LAST:event_editarActionPerformed

    private void redefinirModeloPronosticacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_redefinirModeloPronosticacionActionPerformed
        // TODO add your handling code here:
        this.nuevoModeloPronosticacion();
    }//GEN-LAST:event_redefinirModeloPronosticacionActionPerformed

    private void listaPorcentajesManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listaPorcentajesManualActionPerformed
        // TODO add your handling code here:
        this.establecerListaPorcentajes();
    }//GEN-LAST:event_listaPorcentajesManualActionPerformed

    private void menuPorcentajeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPorcentajeActionPerformed
        // TODO add your handling code here:
        this.editarPorcentajesManualmente();
    }//GEN-LAST:event_menuPorcentajeActionPerformed

    private void menuPorcentajesManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPorcentajesManualActionPerformed
        // TODO add your handling code here:
        this.editarPorcentajesManualmente();
    }//GEN-LAST:event_menuPorcentajesManualActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                ModificarModeloCostos dialog = new ModificarModeloCostos(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton aceptar;
    private javax.swing.JMenuItem cambiarModeloAPorcentaje;
    private javax.swing.JMenuItem cambiarModeloAPronosticacion;
    private javax.swing.JMenuItem cambiarPorcentajeAMano;
    private javax.swing.JTable datos;
    private javax.swing.JButton editar;
    private javax.swing.JMenuItem editarManualmente;
    private javax.swing.JLabel etiquetaPorcentaje;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JMenuItem listaPorcentajesManual;
    private javax.swing.JMenu menuDatos;
    private javax.swing.JMenu menuPorcentaje;
    private javax.swing.JMenuItem menuPorcentajesManual;
    private javax.swing.JMenu menuPronosticacion;
    private javax.swing.JMenuItem nuevoModeloPorcentual;
    private javax.swing.JMenuItem nuevoModeloPronosticacion;
    private javax.swing.JPanel panelPorcentaje;
    private javax.swing.JMenuItem redefinirModeloPronosticacion;
    // End of variables declaration//GEN-END:variables

    private void edicionManual(){
        Manual m = new Manual(null, true);
        double [] nuevos = m.editarDatosManuales(this.escenarioNormal.getListaAnios(),this.mCostos.getCostosActuales());
        if (nuevos!=null){
            this.mCostos.setCostos(nuevos);
            this.dispose();
        }
    }
    
    private void nuevoModeloPronosticacion(){
        ModeloRegresion ventana = new ModeloRegresion(null, true);
        Modelo modeloR = ventana.determinarModeloOptimo("Costos");
        if (modeloR!=null){
            mCostos.setModeloPronosticacion(modeloR);
            this.dispose();
        }
    }

    private void establecerNuevoModeloPorcentual() {
        EstimacionPorcentual epc = new EstimacionPorcentual(null, true);
        ModeloPorcentual mPorcentual = epc.estimarPorcentaje("Costos");
        if (mPorcentual!=null){
            mCostos.setModeloPorcentual(mPorcentual);
            this.dispose();
        }
    }
    
    private void establecerListaPorcentajes(){
        Manual m = new Manual(null, true);
        double [] lista = m.insertarPorcentajes(this.escenarioNormal.getListaAnios());
        if (lista!=null){
            mCostos.setListaPorcentajes(lista);
            this.dispose();
        }
    }
    
    private void editarPorcentajesManualmente(){
        Manual m = new Manual(null, true);
        double [] lista = m.editarPorcentajesManuales(this.escenarioNormal.getListaAnios(),mCostos.getListaPorcentajes());
        if (lista!=null){
            mCostos.setListaPorcentajes(lista);
            this.dispose();
        }
    }
}
